﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CapaNegocios
{
    public abstract class Presupuesto
    {
        protected int id;
        protected Electrodom electrodomestico; // electrodomestico a reparar
        protected DateTime fxFinalizacion; // fecha de finalizacion de la reparacion
        protected Dictionary<Repuesto, int> repuestos; // Tabla <Repuesto, cantidad>
        protected float costo;

        public Presupuesto (int i, Electrodom e, DateTime f, float c)
        {
            id = i;
            electrodomestico = e;
            fxFinalizacion = f;
            costo = c;
            repuestos = new Dictionary<Repuesto,int>(); //inicializada en cero
        }

        public Presupuesto(int i, Electrodom e, DateTime f)
        {
            id = i;
            electrodomestico = e;
            fxFinalizacion = f;
            costo = 0;  // inicializado por defecto
            repuestos = new Dictionary<Repuesto, int>(); //inicializada en cero
        }


        public int Id {
            get { return id; }
            set { id = value; }
        }

        public Electrodom Electrodomestico {
            get { return electrodomestico; }
            set { electrodomestico = value; }
        }

        public DateTime FxFinalizacion {
            get { return fxFinalizacion; }
            set { fxFinalizacion = value; }
        }

        public virtual float Costo {
            get { return costo; }
            set { costo = value; }
        }

        public Dictionary<Repuesto, int> Repuestos
        {
            get { return repuestos; }
            set { repuestos = value; }
        }

        // Metodo para generar la lista de Repuestos y cantidad empleada
        // El formato es: "Item [cantidad], Item2 [cantidad2]"
        public string listarRepuestos()
        {
            // si tiene elementos, procesamos
            if (repuestos.Count != 0)
            {
                string lista = "";
                foreach (KeyValuePair<Repuesto, int> repuesto in repuestos)
                {
                    lista = lista + repuesto.Key.Nombre + " [" + repuesto.Value.ToString() + "], ";
                }
                // Eliminamos el espacio en blanco y la coma del ultimo elemento
                lista = lista.Substring(0, lista.Length - 2);
                return lista;
            }
            // si no tiene, nulo
            else return "";
        }

        public void agregarRepuesto(Repuesto r, int cant)
        {
            repuestos.Add(r, cant);
            actualizaCosto();
        }

        // Luego de agregar una pieza, actualizamos el costo del presupuesto
        public void actualizaCosto()
        {
            foreach (KeyValuePair<Repuesto, int> repuesto in repuestos)
            {
                costo = costo + (repuesto.Key.PrecioUnitario * repuesto.Value);
            }
        }

    }
}
